//
// ----------------------------------------------------------------------------
// 文件： ConfigFile.h
// 日期： 2019年03月29日
// 功能： 配置文件访问公共模块
// 版本： v1.0
// 作者： 谈新
// 邮件： tanxin@smg.cn
// ----------------------------------------------------------------------------
//
#ifndef CONFIGFILE_H_INCLUDE
#define CONFIGFILE_H_INCLUDE

#include <stdio.h>
#include <stdlib.h>

#if defined(LINUX)
    #include <netinet/in.h>
    #include <net/if.h>
    #include <unistd.h>
#else
    #include <ws2tcpip.h>
#endif

#ifndef NETWORK_CALLBACK_DEFINITION
#define NETWORK_CALLBACK_DEFINITION
typedef void (*LOGCALLBACK)(int level, char *message);
typedef void (*TCPCALLBACK)(char *name, int fd, char *ip, unsigned short port);
typedef void (*UDPCALLBACK)(char *name, int fd, struct sockaddr *to, socklen_t tolen);
#endif 

#ifndef UDP_HANDLE_DEFINITION
#define UDP_HANDLE_DEFINITION

typedef struct _HUDP
{
    char                name[256];
    char                host[20];
    unsigned short      port;
    int                 fd;
	int                 loop;
	int                 connected;
    #if defined(LINUX)
	pthread_t           thread;
    #else
	HANDLE              thread;
    #endif
    struct sockaddr_in  sa;
    UDPCALLBACK         udpcallback;
	LOGCALLBACK         logcallback;
}   HUDP;

#endif 

#ifndef TCP_SEVERCLIENT_HANDLE_DEFINITION
#define TCP_SEVERCLIENT_HANDLE_DEFINITION
typedef struct _TCPHANDLE
{
    char           name[256];
    char           host[20];
    unsigned short port;
    int            fd;
    char           cip[20];
	unsigned short cport;
	int            connected;
	TCPCALLBACK    tcpcallback;
	LOGCALLBACK    logcallback;
}   TCPHANDLE;

typedef struct _HTCP
{
    char           name[256];
    char           host[16];
    unsigned short port;
    int            fd;
	int            loop;
	int            connected;
    #if defined(LINUX)
	pthread_t      thread;
    #else
	HANDLE         thread;
    #endif
	TCPCALLBACK    tcpcallback;
	LOGCALLBACK    logcallback;
}   HTCP;
#endif

extern char           dbServer[40];                     // 数据库访问地址
extern char           dbUser[40];                       // 数据库访问用户
extern char           dbPass[40];                       // 数据库访问密码
extern char           dbName[40];                       // 数据库名称
extern unsigned short dbPort;                           // 数据库访问端口

extern unsigned short tcpServerPort;                    // TCP接口服务访问端口
extern unsigned int   heartbeatInterval;                // 客户端心跳间隔时间
extern unsigned int   heartbeatLostCount;               // 客户端心跳漏包判断掉线阀值

extern unsigned int   isSamename;                       // 客户端是否允许重名登录
extern char           accessUser[300];                  // 客户端访问用户设置
extern char           accessPass[300];                  // 客户端访问密码设置

extern unsigned short matchId;                          // 比赛Id
extern char           matchName[50];                    // 比赛名
extern unsigned short isInMatch;                          //是否在比赛中，0：非比赛，1：比赛中
extern unsigned int   recSec;                           // 每隔多少微秒写入一次数据库

void WriteConfig();
void ReadConfigFile(char *file);
void GetDirectory();
void SetSaveDirectory();

#endif 

